#ifndef USUARIO_H_
#define USUARIO_H_

#include <iostream>
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include "Socket.h"
#include "Clase.h"
#include "ReproductorVideo.h"

//class ReceptorChat;
class CajaChat;

class Usuario {
protected:
	std::string nombre_usuario;
	std::string clave;
	// El socket_av del profesor enviar, de alumno recibe
	Socket *socket, *socket_av;
	struct sockaddr_in serv_addr;
	struct sockaddr_in serv_addr_av;
	CajaChat *cajaChat;
	//ReceptorChat *receptor_chat;
	bool conectado;
	bool logeado;
	// Esta lista de las clases individuales a las q se inscribio el usuario
	std::list<unsigned int> clases_inscriptos;
	// Esta lista contiene los cursos asociadas a los q se inscribio el usuario
	std::list<unsigned int> cursos_inscriptos;
	// Funciones para conversion entre string y entero
	unsigned int String_toInt(std::string str);
	std::string Int_toString(unsigned int entero);
public:
	Usuario(char* ip_serv, char* puerto, char *puerto_av);
	int login(std::string nom_usuario, std::string clave, char instr_o_alumn);
	int logout();
	CajaChat* getCajaChat();
	int enviar_texto_chat_al_servidor(std::string &texto);
	void enviar_texto_chat_al_chat(std::string &texto);
	int recibirRespuesta(char *cod1);
	int enviarDatos(char cod_op, int tam_arg, std::string datos);
	void desconectar();
	virtual void crear_hilos_de_recepcion() = 0;
	// Devuelve true si el usuario esta en clase
	virtual bool esta_en_clase() = 0;
	// Destructor de la clase
	virtual ~Usuario();
};

#endif
